package com.mmall.pay.result;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.util.Date;

/**
 * @author gg
 * @version QueryOrderResult.java, v 0.1 2019-05-27 17:55 gg
 */
@Data
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class QueryOrderResult extends BaseResult {


    /**
     * 用户标识.
     * openid
     * 是
     * String(128)
     * oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
     * 用户在商户appid下的唯一标识
     */
    private String openid;

    /**
     * 交易类型.
     * trade_type
     * 是
     * String(16)
     * JSAPI
     * 调用接口提交的交易类型，取值如下：JSAPI，NATIVE，APP，MICROPAY，详细说明见参数规定
     */
    private String tradeType;

    /**
     * 交易状态.
     * trade_state
     * 是
     * String(32)
     * SUCCESS
     * SUCCESS—支付成功,REFUND—转入退款,NOTPAY—未支付,CLOSED—已关闭,REVOKED—已撤销（刷卡支付）,USERPAYING--用户支付中,PAYERROR--支付失败(其他原因，如银行返回失败)
     */
    private String tradeState;

    /**
     * <pre>
     * 付款银行.
     * bank_type
     * 是
     * String(16)
     * CMC
     * 银行类型，采用字符串类型的银行标识
     * </pre>
     */
    private String bankType;

    /**
     * <pre>
     * 订单金额.
     * total_fee
     * 是
     * Int
     * 100
     * 订单总金额，单位为分
     * </pre>
     */
    private Integer totalFee;

    /**
     * <pre>
     * 应结订单金额.
     * settlement_total_fee
     * 否
     * Int
     * 100
     * 应结订单金额=订单金额-非充值代金券金额，应结订单金额<=订单金额。
     * </pre>
     */
    private Integer settlementTotalFee;

    /**
     * 货币种类.
     * fee_type
     * 否
     * String(8)
     * CNY
     * 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     */
    private String feeType;

    /**
     * 现金支付金额.
     * cash_fee
     * 是
     * Int
     * 100
     * 现金支付金额订单现金支付金额，详见支付金额
     */
    private Integer cashFee;

    /**
     * 现金支付货币类型.
     * cash_fee_type
     * 否
     * String(16)
     * CNY
     * 货币类型，符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     */
    private String cashFeeType;

    /**
     * 代金券金额.
     * coupon_fee
     * 否
     * Int
     * 100
     * “代金券”金额<=订单金额，订单金额-“代金券”金额=现金支付金额，详见支付金额
     */
    private Integer couponFee;

    /**
     * coupon_count
     * 否
     * Int
     * 1
     * 代金券使用数量
     */
    private Integer couponCount;

    /**
     * 微信支付订单号.
     * transaction_id
     * 是
     * String(32)
     * 1009660380201506130728806387
     * 微信支付订单号
     */
    private String transactionId;

    /**
     * 商户订单号.
     * out_trade_no
     * 是
     * String(32)
     * 20150806125346
     * 商户系统的订单号，与请求一致。
     */
    private String outTradeNo;

    /**
     * 附加数据.
     * attach
     * 否
     * String(128)
     * 深圳分店
     * 附加数据，原样返回
     */
    private String attach;

    /**
     * 支付完成时间.
     * time_end
     * 是
     * String(14)
     * 20141030133525
     * 订单支付时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
     */
    private String timeEnd;

    /**
     * 交易状态描述.
     * trade_state_desc
     * 是
     * String(256)
     * 支付失败，请重新下单支付
     * 对当前查询订单状态的描述和下一步操作的指引
     */
    private String tradeStateDesc;

    //支付宝字段

    /**
     * 支付宝店铺编号
     */
    private String alipayStoreId;

    /**
     * 间连商户在支付宝端的商户编号；
     * 只在间连场景下返回；
     */
    private String alipaySubMerchantId;

    /**
     * 预授权支付模式，该参数仅在信用预授权支付场景下返回。信用预授权支付：CREDIT_PREAUTH_PAY
     */
    private String authTradePayMode;

    /**
     * 订单描述;
     * 只在间连场景下返回；
     */
    private String body;

    /**
     * 买家支付宝账号
     */
    private String buyerLogonId;

    /**
     * 买家实付金额，单位为元，两位小数。该金额代表该笔交易买家实际支付的金额，不包含商户折扣等金额
     */
    private String buyerPayAmount;

    /**
     * 买家在支付宝的用户id
     */
    private String buyerUserId;

    /**
     * 买家名称；
     * 买家为个人用户时为买家姓名，买家为企业用户时为企业名称；
     * 默认不返回该信息，需与支付宝约定后配置返回；
     */
    private String buyerUserName;

    /**
     * 买家用户类型。CORPORATE:企业用户；PRIVATE:个人用户。
     */
    private String buyerUserType;

    /**
     * 该笔交易针对收款方的收费金额；
     * 默认不返回该信息，需与支付宝约定后配置返回；
     */
    private String chargeAmount;

    /**
     * 平台优惠金额
     */
    private String discountAmount;

    /**
     * 本次交易支付所使用的单品券优惠的商品优惠信息
     */
    private String discountGoodsDetail;

    /**
     * 交易额外信息，特殊场景下与支付宝约定返回。
     * json格式。
     */
    private String extInfos;


    /**
     * 行业特殊信息（例如在医保卡支付业务中，向用户返回医疗信息）。
     */
    private String industrySepcDetail;

    /**
     * 交易中用户支付的可开具发票的金额，单位为元，两位小数。该金额代表该笔交易中可以给用户开具发票的金额
     */
    private String invoiceAmount;

    /**
     * 商家优惠金额
     */
    private String mdiscountAmount;


    /**
     * 支付币种订单金额
     */
    private String payAmount;

    /**
     * 订单支付币种
     */
    private String payCurrency;

    /**
     * 积分支付的金额，单位为元，两位小数。该金额代表该笔交易中用户使用积分支付的金额，比如集分宝或者支付宝实时优惠等
     */
    private String pointAmount;

    /**
     * 实收金额，单位为元，两位小数。该金额为本笔交易，商户账户能够实际收到的金额
     */
    private String receiptAmount;

    /**
     * 本次交易打款给卖家的时间
     */
    private Date sendPayDate;


    /**
     * 支付清算编号，用于清算对账使用；
     * 只在银行间联交易场景下返回该信息；
     */
    private String settlementId;

    /**
     * 商户门店编号
     */
    private String storeId;

    /**
     * 请求交易支付中的商户店铺的名称
     */
    private String storeName;

    /**
     * 商户机具终端编号
     */
    private String terminalId;


}